//
// Created by 11510 on 2024/6/8.
//
#include <string.h>
#include <unistd.h>
#include <iostream>
#include <fstream>
#include <sstream>
using std::cin;
using std::cerr;
using std::cout;
using std::endl;
using std::ifstream;
using std::ofstream;
using std::string;
using std::istringstream;

/***
 * 惯用法：当函数参数为对象，首先考虑用const引用的形式作为形参
 * 引用的意义在于避免实参初始化形参发生赋值
 * const意义在于避免函数体中通过引用修改实参，以及为了绑定右值属性的对象
 * 
 */
void readConfig(const string &filename){
    ifstream ifs(filename.c_str());

    if(ifs == NULL){
        cerr << "ifstream open file failed" << endl;
    }

    string line;
    string key, value;

    while (std::getline(ifs, line)){
        /* 字符串输入流相当于缓冲区，缓存了一行的内容，之后可以对这一行的内容解析 */
        istringstream iss(line);
        /* 这里利用了输入流运算符默认以空格分隔 */
        iss >> key >> value;
        std::cout << key << "\t" << value << std::endl;
    }

}

void test0(){
    /**
     * 编译器会用 C 风格字符串创建出一个匿名的string对象
     * 作为实参
     */
    readConfig("config");

}

int main() {
    test0();
    return 0;
}